package com.xl.util;

/**
 * MyBatis 相关的类，SqlSession 是用来与数据库交互的核心接口，
 * SqlSessionFactory 是 MyBatis 的工厂类，
 * SqlSessionFactoryBuilder 用来构建 SqlSessionFactory，
 * Resources 用来加载 MyBatis 配置文件
 * */
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;



import java.io.IOException;
import java.io.InputStream;

public class MyBatisUtil {

    // 这个静态变量保存了 MyBatis 的 SqlSessionFactory 实例，
    // SqlSessionFactory 是 MyBatis 的工厂类，它负责创建 SqlSession 实例
    private static SqlSessionFactory factory;

    static {
        try {
            String resource = "mybatis-config.xml";
            // 通过 Resources.getResourceAsStream 加载 MyBatis 配置文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
            // 通过 SqlSessionFactoryBuilder 构建 SqlSessionFactory
            factory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 提供了获取 SqlSessionFactory 实例的方式，其他类可以调用它来获取 factory
    public static SqlSessionFactory getFactory() {
        return factory;
    }

    // 返回一个默认的 SqlSession，并且启用自动提交（autoCommit = true）
    // SqlSession 是 MyBatis 操作数据库的核心对象，用于执行 SQL 语句、提交事务等
    public static SqlSession openSession() {
        return factory.openSession(true);
    }

    // 允许用户指定 SqlSession 是否启用自动提交事务
    public static SqlSession openSession(boolean autoCommit) {
        return factory.openSession(autoCommit);
    }
}
